Skip to content

ci(PLAY-1498 ): migrate CI to GitHub Actions and publish npm on releases - #114

Merged
maximzavadskiy merged 3 commits into
masterfrom
feat/github-actions-ci-npm-publish
Jul 30, 2026
Merged

ci(PLAY-1498 ): migrate CI to GitHub Actions and publish npm on releases#114
maximzavadskiy merged 3 commits into
masterfrom
feat/github-actions-ci-npm-publish

Conversation

@maximzavadskiy

@maximzavadskiy maximzavadskiy commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Implements PLAY-1498 (epic PLAY-1313 UI Redesign).

Changes

  • Migrate CircleCI test job to GitHub Actions (pr.yml): Node 20, npm ci with caching, tsc --version, npm run lint, npm run build on every pull request.
  • Rename the PR-title lint workflow to semantic-pr.yml, matching flowplayer-native naming.
  • New reusable release-channel.yml (same structure as flowplayer-native): checks out the release tag, verifies package.json version matches the tag, then publishes @flowplayer/translations to npm.
    • released event → dist-tag latest (via released.yml)
    • prereleased event → dist-tag next (via prereleased.yml)
    • workflow_dispatch with tag/channel/dry_run inputs for manual runs, backfills, and debugging (dry_run runs the full pipeline with npm publish --dry-run)
  • Remove .circleci/ entirely. The S3 sync of dist/ is intentionally not ported — AWS publishing of translations is handled elsewhere.

The publish pipeline was verified end-to-end on this PR via a temporary release-dry-run job (checkout v2.7.0 → version guard → npm cinpm publish --tag=next --dry-run): passing run. The job was removed after verification; the dry_run input remains for future debugging.

Manual follow-ups after merge

  1. Add the NPM_TOKEN repo secret (npm automation token with publish rights to @flowplayer/translations).
  2. Backfill npm (currently latest = 2.6.0, GitHub is at v2.7.0): run the release-channel workflow with tag=v2.7.0, channel=stable.
  3. Disable/unfollow the project in CircleCI so the stale "CircleCI Pipeline" check disappears.

🤖 Generated with Claude Code

- Port CircleCI test job to pr.yml (npm ci, tsc, lint, build)
- Rename PR title lint workflow to semantic-pr.yml (flowplayer-native naming)
- Add reusable release-channel.yml: npm publish on released (latest) /
  prereleased (next) events, with workflow_dispatch backfill and dry_run
- Exercise the publish pipeline on every PR via a release-dry-run job
- Remove .circleci; S3 publishing of translations is handled elsewhere

PLAY-1498

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@maximzavadskiy
maximzavadskiy requested review from a team and bbbo as code owners July 28, 2026 21:47
@maximzavadskiy
maximzavadskiy requested review from alexarassat and removed request for a team July 28, 2026 21:47
@maximzavadskiy maximzavadskiy changed the title ci: migrate CI to GitHub Actions and publish npm on releases ci(PLAY-1498 ): migrate CI to GitHub Actions and publish npm on releases Jul 28, 2026
The dry-run already validated the publish pipeline on the initial PR run;
keep the dry_run input on release-channel for future manual debugging.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates CI from CircleCI to GitHub Actions and adds a GitHub Actions-based release pipeline to publish @flowplayer/translations to npm when GitHub Releases are created.

Changes:

  • Replaces the CircleCI PR build/lint pipeline with a pr.yml GitHub Actions workflow (Node 20, npm ci, lint, build).
  • Adds PR title linting via a dedicated semantic-pr.yml workflow.
  • Adds a reusable release-channel.yml workflow, wired by released.yml/prereleased.yml, to publish stable (latest) and canary (next) tags to npm.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
.github/workflows/pr.yml Runs install/lint/build on pull requests using GitHub Actions.
.github/workflows/semantic-pr.yml Validates semantic PR titles via action-semantic-pull-request.
.github/workflows/release-channel.yml Reusable workflow to validate tag/version and publish to npm.
.github/workflows/released.yml Triggers stable npm publish on GitHub “released” events.
.github/workflows/prereleased.yml Triggers canary npm publish on GitHub “prereleased” events.
.circleci/config.yml Removes CircleCI configuration.
Comments suppressed due to low confidence (1)

.github/workflows/release-channel.yml:63

  • NPM_TOKEN is marked as optional (to support dry runs), but the workflow always writes it into ~/.npmrc. When the secret is unset this will write an empty auth token, which can break npm ci/npm publish and also makes real publishes fail later with an auth error. Configure npm auth only when dry_run is false, and fail early if the token is missing.
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: "npm"
      - run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/release-channel.yml
Comment thread .github/workflows/semantic-pr.yml

@bbbo bbbo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM as far as I understand the code ;)

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@maximzavadskiy
maximzavadskiy merged commit 15bf89c into master Jul 30, 2026
3 checks passed
@maximzavadskiy
maximzavadskiy deleted the feat/github-actions-ci-npm-publish branch July 30, 2026 15:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants